package org.itstack.chain;

/**
 * 审批链构建器
 * 负责构建责任链，设置处理器的顺序
 */
public class ApprovalChainBuilder {
    
    private ApprovalHandler firstHandler;
    private ApprovalHandler lastHandler;
    
    /**
     * 添加处理器到链中
     * @param handler 要添加的处理器
     * @return 构建器实例，支持链式调用
     */
    public ApprovalChainBuilder addHandler(ApprovalHandler handler) {
        if (firstHandler == null) {
            // 第一个处理器
            firstHandler = handler;
            lastHandler = handler;
        } else {
            // 将新处理器添加到链的末尾
            lastHandler.setNextHandler(handler);
            lastHandler = handler;
        }
        return this;
    }
    
    /**
     * 构建审批链
     * @return 链中的第一个处理器
     */
    public ApprovalHandler build() {
        return firstHandler;
    }
    
    /**
     * 创建默认的审批链
     * 部门经理 -> 总经理 -> 董事长 -> 董事会
     * @return 默认审批链
     */
    public static ApprovalHandler createDefaultChain() {
        return new ApprovalChainBuilder()
                .addHandler(new DepartmentManagerHandler())
                .addHandler(new GeneralManagerHandler())
                .addHandler(new PresidentHandler())
                .addHandler(new BoardHandler())
                .build();
    }
}
